//
// Created by 30986 on 2020/9/26.
//定义一个满足下列要求的Date类
//用 日 月 年的格式输出日期
//定义一个函数提供在日期上加一天的操作
//提供一个构造函数实现日期的初始化
#include<iostream>
using namespace std;
class Date{
    int year,month,day;
    bool isLeapYear(){return (year%400==0)||(year%100!=0)&&(year%4==0);}//可以被400整除 或不能被100整除 可以被4整除

public:
    friend ostream& operator<<(ostream& out,const Date& d){
        return out<<d.day<<"/"<<d.month<<"/"<<d.year<<"\n";
    }
    Date& operator++(){
        bool mEnd,yEnd=0;
        switch (month) {
            case 12: yEnd = day==31;//是否是一年最后一天的标志
            case 10:
            case 8:
            case 7:
            case 5:
            case 3:
            case 1:mEnd = day==31;break;//一个月最后一天的标志
            case 2: mEnd = day==28+isLeapYear();
                break;
            case 11:
            case 9:
            case 6:
            case 4:mEnd =day==30;break;
        }
        // 先看是否年的最后一天，是的话 执行：前面  不是的话执行：后面 -->是否是月的最后一天
        yEnd ? (day=1,month=1,year++) : (mEnd ? day=1,month++ : day++);
        return *this;
    }
    void set(int y ,int m ,int d){year=y,month=m,day=d;}
    void display(){
        cout<<this->year<<"年"<< this->month<<"月"<< this->day<<"日";
    }
};
int main(){
    Date t;
    t.set(2020,9,30);
    t.operator++();
    t.display();
}